package com.sishu.websocket4.service.impl;

import cn.dev33.satoken.util.SaResult;
import com.sishu.websocket4.mapper.TikuMapper;
import com.sishu.websocket4.pojo.Tiku;
import com.sishu.websocket4.service.Tikuservice;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.sql.Timestamp;
import java.util.*;
import java.util.concurrent.ThreadLocalRandom;

@Service
public class TikuServiceimpl implements Tikuservice {
    @Resource
    private TikuMapper tikuMapper;

    private Set<Integer> usedQuestionIds = Collections.synchronizedSet(new HashSet<>());

    @Override
    public SaResult getRandomTiku() {
        List<Tiku> allTikus = tikuMapper.selcetAll();//查询数据库中所有的题目放到一个list中
        if (CollectionUtils.isEmpty(allTikus)) {//如果数据库中没有数据那么会返回题库为空
            return SaResult.error("题库为空");
        }

        List<Tiku> availableTikus = new ArrayList<>();//存储未被使用过的题目
        for (Tiku tiku : allTikus) {
            if (!usedQuestionIds.contains(tiku.getQuestionId())) {//遍历 allTikus 列表，检查每个题目的 questionId 是否在 usedQuestionIds 集合中
                availableTikus.add(tiku);//如果 questionId 不在 usedQuestionIds 中，将该题目添加到 availableTikus 列表中
            }
        }

        if (availableTikus.isEmpty()) {
            // 所有题目都已使用过，清空已使用的集合
            usedQuestionIds.clear();
            availableTikus.addAll(allTikus);
        }

        // 随机选择一个题目
        int randomIndex = ThreadLocalRandom.current().nextInt(availableTikus.size());
        Tiku selectedTiku = availableTikus.get(randomIndex);

        // 记录已使用的 questionId
        usedQuestionIds.add(selectedTiku.getQuestionId());

        return SaResult.ok("随机题目获取成功").setData(selectedTiku);
    }

    @Override
    public SaResult Tikuanswer(String id, String answer) {
       // 根据题目ID查询题目
        Tiku selectbyquestionid = tikuMapper.selectbyquestionid(id);
        if (selectbyquestionid==null){
            return SaResult.error("题目不存在");
        }
        else{
            if (selectbyquestionid.getAnswer().equals(answer)) {
                return SaResult.ok("答案正确");
            } else {
                return SaResult.error("答案错误");
            }
        }
    }

    @Override
    //添加题目
    public SaResult insertTiku(List<Tiku> tikus) {

        for (Tiku tiku : tikus) {
//            Tiku tiku1 = new Tiku();
//            tiku1.setQuestionId(tiku.getQuestionId());
//            tiku1.setType(tiku.getType());
//            tiku1.setContent(tiku.getContent());
//            tiku1.setOptions(tiku.getOptions());
//            tiku1.setAnswer(tiku.getAnswer());
//            tiku1.setDifficulty(tiku.getDifficulty());
            tiku.setCreateTime(new Timestamp(System.currentTimeMillis()));
            tiku.setUpdateTime(new Timestamp(System.currentTimeMillis()));
            tikuMapper.insert(tiku);
        }
        return SaResult.ok("题库插入成功");
    }

    @Override
    //查询题目是不是在数据库中之前已经有了
    public SaResult selectTiku(Tiku tiku) {
        //查询这个题目在数据中有没有,需求没有

        List<Tiku> tikus = tikuMapper.selcetAll();//数据库中的题目
        System.out.println("数据库中的tikus = " + tikus);
        boolean flag = false;//默认题库中没有之前的题目

        for (Tiku tiku1 : tikus) {//循环数据库中的题目

            if (tiku1.getContent().equals(tiku.getContent())){//如果题库中的id和传过来的题目id相等的话
                flag = true;//有这个题目
                break;
//                return SaResult.error("题库已经有" + tiku.getContent() + "此题了,麻烦更换题目");

            }
        }
        if (flag) {
            return SaResult.error("题库已经有" + tiku.getContent() + "此题了,麻烦更换题目");
        }
        return SaResult.ok("题库没有此题,可以添加");
    }

//    List<User> users = userMapper.selectAll();
//        System.out.println("数据库users = " + users);
//    boolean flag = false;
//        for (User user1 : users) {
//        if (user1.getUserId().equals(user.getUserId())&&user1.getUserName().equals(user.getUserName())){
//            flag = true;
//            return SaResult.ok("用户存在");
//        }
//    }
//         if (flag){
//        return SaResult.error(user.getUserId()+"用户不存在,无法创建小组");
//    }
//        return SaResult.error("未知错误");
}
